﻿using System;
using System.Collections.Generic;
using System.Text;

namespace PlutoStudio.Domain.UnitOfWork
{
    /// <summary>
    /// 定义一个工作单元。
    /// 请使用 <see cref="IUnitOfWorkManager.Begin()"/> 来启动一个新的工作单元。
    /// </summary>
    public interface IUnitOfWork : IActiveUnitOfWork, IUnitOfWorkCompleteHandle
    {
        /// <summary>
        /// 当前工作单元的唯一ID。
        /// </summary>
        string Id { get; }

        /// <summary>
        /// 如果外围工作单元存在，则引用外围工作单元。
        /// </summary>
        IUnitOfWork Outer { get; set; }


        /// <summary>
        /// 使用指定的<see cref="UnitOfWorkOptions"/> 选项启动工作单元。
        /// </summary>
        /// <param name="options"><see cref="UnitOfWorkOptions"/> 选项</param>
        void Begin(UnitOfWorkOptions options);
    }
}
